package FloodFill;

/**
 * @description:
 * @author: ywk
 * @date: 2021-01-02
 */
public class 扫雷 {
    static int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
        int origColor = image[sr][sc];
        fill(image, sr, sc, origColor, newColor);
        return image;
    }

    static boolean inArea(int[][] image, int x, int y) {
        return x >= 0 && x < image.length && y >= 0 && y < image[0].length;
    }

    static void fill(int[][] image, int x, int y, int origColor, int newColor) {
        // 出界：超出数组边界
        if (!inArea(image, x, y)) return;
        // 碰壁：遇到其他颜⾊，超出 origColor 区域
        if (image[x][y] != origColor) return;
        // 已探索过的 origColor 区域
        if (image[x][y] == newColor) return;
        // choose：打标记，以免重复
        image[x][y] = newColor;
        fill(image, x, y + 1, origColor, newColor);
        fill(image, x, y - 1, origColor, newColor);
        fill(image, x - 1, y, origColor, newColor);
        fill(image, x + 1, y, origColor, newColor);
    }

    public static void main(String[] args) {
        int[][] arr = {{1, 0, 1},
                {1, 1, 1},
                {1, 0, 1}};
        floodFill(arr, 2, 2, 2);
        System.out.println(arr);

    }
}
